Skip to content

Add AmazingHand dual-hand support(tested with left only) with teleope…#1

Open
mraiddanial-hub wants to merge 15 commits intomsf4-0:mainfrom
mraiddanial-hub:msf_lerobot_amazinghand
Open

Add AmazingHand dual-hand support(tested with left only) with teleope…#1
mraiddanial-hub wants to merge 15 commits intomsf4-0:mainfrom
mraiddanial-hub:msf_lerobot_amazinghand

Conversation

@mraiddanial-hub
Copy link
Copy Markdown

…rator and run-policy command

  • Added lerobot_robot_amazinghand robot driver with dual-hand support (left/right)
  • Added lerobot_teleoperator_amazinghandtracker with MediaPipe hand tracking
  • Implemented lerobot-run-policy command for running trained policies without recording
  • Added configurable MediaPipe confidence thresholds (default 0.7)
  • Fixed motor ID mapping for right hand (left IDs + 10)
  • Added MuJoCo visualization support with LEROBOT_SHOW_MUJOCO_VIEWER
  • Created comprehensive setup documentation in AMAZINGHAND_SETUP.md

What this does

Explain what this PR does. Feel free to tag your PR with the appropriate label(s).

Examples:

Title Label
Fixes #[issue] (🐛 Bug)
Adds new dataset (🗃️ Dataset)
Optimizes something (⚡️ Performance)

SECTION TO REMOVE BEFORE SUBMITTING YOUR PR

Note: Anyone in the community is free to review the PR once the tests have passed. Feel free to tag
members/contributors who may be interested in your PR. Try to avoid tagging more than 3 people.

Note: Before submitting this PR, please read the contributor guideline.

ReubenLimMonash and others added 15 commits October 22, 2025 13:17
…rator and run-policy command

- Added lerobot_robot_amazinghand robot driver with dual-hand support (left/right)
- Added lerobot_teleoperator_amazinghandtracker with MediaPipe hand tracking
- Implemented lerobot-run-policy command for running trained policies without recording
- Added configurable MediaPipe confidence thresholds (default 0.7)
- Fixed motor ID mapping for right hand (left IDs - 10)
- Added MuJoCo visualization support with LEROBOT_SHOW_MUJOCO_VIEWER
- Created comprehensive setup documentation in AMAZINGHAND_SETUP.md
	new file:   RECALIBRATION_GUIDE.md
	new file:   calibrate_motor_offsets.py
	new file:   delete_calibration_files.py
	new file:   expand_calibration_ranges.py
	new file:   main_rs_backup.txt
	modified:   pyproject.toml
	new file:   requirements-amazinghand.txt
	modified:   src/lerobot/__init__.py
	modified:   src/lerobot/cameras/opencv/camera_opencv.py
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/config.json
	modified:   src/lerobot/policies/act/configuration_act.py
	modified:   src/lerobot/robots/__init__.py
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/AH_Left/mjcf/config.json
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/AH_Right/mjcf/config.json
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/__init__.py
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/amazinghand.mdx
	modified:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/amazinghand.py
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/config/l_hand.toml
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/lerobot_robot_amazinghand/config_amazinghand.py
	new file:   src/lerobot/robots/lerobot_robot_amazinghand/setup.py
	modified:   src/lerobot/robots/stretch3/configuration_stretch3.py
	modified:   src/lerobot/robots/utils.py
	new file:   src/lerobot/scripts/5gtest/import lerobot.py
	new file:   src/lerobot/scripts/5gtest/inspect_so101.py
	new file:   src/lerobot/scripts/5gtest/leader_so101_sender.py
	new file:   src/lerobot/scripts/5gtest/pc1_camera_client.py
	new file:   src/lerobot/scripts/5gtest/pc1_leader_sender.py
	new file:   src/lerobot/scripts/5gtest/test_import_so101.py
	modified:   src/lerobot/scripts/lerobot_calibrate.py
	modified:   src/lerobot/scripts/lerobot_record.py
	modified:   src/lerobot/scripts/lerobot_replay.py
	new file:   src/lerobot/scripts/lerobot_run_policy.py
	modified:   src/lerobot/scripts/lerobot_teleoperate.py
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/__init__.py
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/amazinghandtracker.py
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/config_amazinghandtracker.py
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/inverse_kinematics.py
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/config.json
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/setup.py
	modified:   src/lerobot/teleoperators/utils.py
	modified:   src/lerobot/utils/import_utils.py
	modified:   src/lerobot/utils/visualization_utils.py
	modified:   webrtc_teleoperation/pc2_follower/robot_receiver_udp.py
	modified:   webrtc_teleoperation/signaling_server/server.py
…0608_04.stl

	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/custom_servo_horn.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/distal.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/distal_shell.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/finger_frame_1.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/finger_frame_2.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/gimbal.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/l_hand_plate.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/l_wrist_interface.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/link.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/m2_rod_l18.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/parallel_pin_2_x_10__fee063fca0c8b40e46bbc4ffff61d999.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/parallel_pin_2_x_16__da4b7ddbe9d803fe3fbc70f2e822b99b.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/ph_pan_head_screw_m2x0_40_x_10__2803432263e518bbd16bccbbef8784ed.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/plain_washer_large_grade_a_m2_5__9a369f0dc77bf9c598cdf3fb468977e5.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/proximal.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/proximal_shell.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/rotule_ball.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/rotule_lever.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/scs0009.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/spacer.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/std00333_plast_tcb_torx_2_5x8__configuration_copy_of_default.stl
	new file:   src/lerobot/configs/robot/amazinghand/mjcf/assets/std00447_thermoplastique_m2_5x6__configuration_default.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/bushing_0608_04.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/custom_servo_horn.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/distal.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/distal_shell.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/finger_frame_1.stl	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/finger_frame_2.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/gimbal.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/l_hand_plate.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/l_wrist_interface.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/link.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/m2_rod_l18.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/parallel_pin_2_x_10__fee063fca0c8b40e46bbc4ffff61d999.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/parallel_pin_2_x_16__da4b7ddbe9d803fe3fbc70f2e822b99b.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/ph_pan_head_screw_m2x0_40_x_10__2803432263e518bbd16bccbbef8784ed.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/plain_washer_large_grade_a_m2_5__9a369f0dc77bf9c598cdf3fb468977e5.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/proximal.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/proximal_shell.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/rotule_ball.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/rotule_lever.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/scs0009.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/spacer.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/std00333_plast_tcb_torx_2_5x8__configuration_copy_of_default.stl
	new file:   src/lerobot/teleoperators/lerobot_teleoperator_amazinghandtracker/lerobot_teleoperator_amazinghandtracker/mjcf/assets/std00447_thermoplastique_m2_5x6__configuration_default.stl
	modified:   webrtc_teleoperation/pc1_leader/leader_sender_udp.py
	modified:   webrtc_teleoperation/pc2_follower/robot_receiver_udp.py
	modified:   webrtc_teleoperation/pc1_leader/leader_sender_udp.py
	modified:   webrtc_teleoperation/pc2_follower/camera_server_webrtc.py
	modified:   webrtc_teleoperation/pc2_follower/robot_receiver_udp.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants